package com.xinrui.sunnyday.serivce.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.xinrui.sunnyday.dao.OrderSettingDao;
import com.xinrui.sunnyday.exception.SunnydayException;
import com.xinrui.sunnyday.pojo.OrderSetting;
import com.xinrui.sunnyday.service.CheckItemService;
import com.xinrui.sunnyday.service.OrderSettingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;
import java.util.Map;

@Service(interfaceClass = OrderSettingService.class)
@Transactional//事务开启
public class OrderSettingServiceImpl implements OrderSettingService {
    @Autowired
    private OrderSettingDao orderSettingDao;

    /**
     * 批量处理,上传文件
     *
     * @param orderSetting
     */
    @Override
    public void add(List<OrderSetting> orderSetting) {
//            遍历将所有的orderSetting遍历出来
        for (OrderSetting setting : orderSetting) {
//                遍历日期
            Date orderDate = setting.getOrderDate();
//                根据日期去查询数据库有没有重复的日期
            OrderSetting osInDb = orderSettingDao.findByDate(orderDate);
//            判断有重复日期
            if (null != osInDb) {
//                存在该日期
                //  判断预约已预约人数是否大于可预约人数
                if (osInDb.getReservations() > setting.getNumber()) {
//                    大于则报错
                    throw new SunnydayException(setting.getOrderDate() + "中，已预约的人数比你现在设置的可预约人数要大");
                } else {
//                    小于则更新
                    orderSettingDao.updateNumber(setting);
                }
            } else {
//                没有重复日期
                orderSettingDao.add(setting);
            }
        }
    }

    /**
     * 查询显示预约信息
     *
     * @param time
     * @return
     */
    @Override
    public List<Map<String, Integer>> findAllDate(String time) {
//        1.进行拼接随意拼接一个日期使用日期函数进行本月的查询，拼接01-28都可以
        String date = time + "-01";
//        2.传递参数到dao层,并返回controller层
        return orderSettingDao.findAllDate(date);
    }

    /**
     * 修改可预约信息
     *
     * @param orderSetting
     */
    @Override
    public void update(OrderSetting orderSetting) {
//        查询出来日期
        Date date = orderSetting.getOrderDate();
        //                根据日期去查询数据库有没有重复的日期
        OrderSetting osInDb = orderSettingDao.findByDate(date);
//            判断有重复日期
        if (null != osInDb) {
//                存在该日期
            //  判断预约已预约人数是否大于可预约人数
            if (osInDb.getReservations() > orderSetting.getNumber()) {
//                    大于则报错
                throw new SunnydayException(orderSetting.getOrderDate() + "中，已预约的人数比你现在设置的可预约人数要大");
            } else {
//                    小于则更新
                orderSettingDao.updateNumber(orderSetting);
            }
        } else {
//                没有重复日期
            orderSettingDao.add(orderSetting);
        }
    }
}
